/**
 * Copyright 2011 Honeywell Federal Manufacturing & Technologies, LLC. This material was produced under U.S. Government
 * contract DE-ACO4-01AL66850, Honeywell Federal Manufacturing & Technologies, LLC, (FM&T) with the U. S. Department of
 * Energy for the operation of the Kansas City Plant . The U.S. Government has rights to use, reproduce, and distribute
 * this software.  NEITHER THE GOVERNMENT NOR Honeywell Federal Manufacturing & Technologies, LLC, MAKES ANY WARRANTY,
 * EXPRESS OR IMPLIED, OR ASSUMES ANY LIABILITY FOR THE USE OF THIS SOFTWARE.  If software is modified to produce
 * derivative works, such modified software should be clearly marked, so as not to confuse it with the version available
 * from FM&T.
 *
 * Additionally, this program is free software; you can redistribute it and/or modify it under the terms of the GNU
 * General Public License Version 3 published by the Free Software Foundation. Accordingly, this program is distributed in
 * the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
 * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details.
 *
 * You should have received a copy of the GNU General Public License along with this library.
 * If not, see http://www.gnu.org/licenses/.
 */
package org.braintrain.tapestry.view.components;

import org.apache.hivemind.ApplicationRuntimeException;
import org.apache.tapestry.*;
import org.apache.tapestry.annotations.Parameter;
import org.apache.tapestry.form.IFormComponent;

/**
 * Backend for the TinyMCE component.
 * 
 * @author John Ericksen
 *
 */

public abstract class TinyMCE extends BaseComponent implements IFormComponent{

    @Parameter(required=true)
    public abstract String getValue();
    public abstract void setValue(String value);
    
    @Parameter(required=false, defaultValue="15")
    public abstract String getRows();
    public abstract void setRows(String value);
    
    @Parameter(required=false, defaultValue="80")
    public abstract String getCols();
    public abstract void setCols(String value);

    @Parameter(required = false, defaultValue="buildDefaultTinyMCEConfiguration()")
    public abstract TinyMCEConfigurationFactory getConfigurationFactory();
    public abstract void setConfigurationFactory(TinyMCEConfigurationFactory factory);


    public TinyMCEConfigurationFactory buildDefaultTinyMCEConfiguration(){
        return new TinyMCEConfigurationFactory();
    }
    
    protected void renderComponent(IMarkupWriter writer, IRequestCycle cycle) {

        if (!cycle.isRewinding())
        {
            PageRenderSupport body = TapestryUtils.getOptionalPageRenderSupport(cycle);

            if (body == null)
                throw new ApplicationRuntimeException(
                    Tapestry.format("must-be-contained-by-body", "TinyMCE"),
                    this,
                    null,
                    null);

            super.renderComponent(writer, cycle);
        }
        else
        {
            setValue(cycle.getParameter(getClientId()));
        }
    }

    public String getTinyMCEConfiguration(){

        if(getConfigurationFactory() == null){
            setConfigurationFactory(buildDefaultTinyMCEConfiguration());
        }

        return getConfigurationFactory().buildConfiguration().toString();
    }
}
